package com.wing.api.add.productSeries.impl;

import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.wing.api.ApplicationContextUtil;
import com.wing.api.add.productSeries.BaseProductSeriesService;
import com.wing.cabinet.model.response.EnterpricceIdVO;
import com.wing.common.exception.BusinessException;
import com.wing.common.utils.JsonResult;
import com.wing.common.utils.Result;
import com.wing.enterprise.feign.EnterpriseClient;
import com.wing.enterprise.product.model.entity.Product;
import com.wing.enterprise.product.model.request.ProductForm;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.io.IOException;

/**
 * 标准部门接口
 */
@Service
@Slf4j
public class StandardProductSeriesServiceImpl implements BaseProductSeriesService {

    @Transactional
    @Override
    public void logicProcess(JSONObject jsonObject, EnterpricceIdVO enterpricceIdVo) throws IOException {
        log.info("请求参数,{}", jsonObject.toJSONString());
        //此处需要做接口签名验证
        //sign = md5（参数1+参数2+参数3+key）
        String sourceSign = jsonObject.getString("sign"); // 签名值
        JSONArray data = jsonObject.getJSONArray("data"); //业务数据
        if(StringUtils.isBlank(sourceSign)){
            throw new BusinessException("签名值为空！");
        }
        if(StringUtils.isBlank(data.toJSONString())){
            throw new BusinessException("请求参数为空！");
        }
        /*log.info("签名源串,{}", sourceSign);
        String desSign = DigestUtil.md5Hex("specCode" + "name"  + enterpricceIdVo.getKey());
        log.info("签名目的串,{}", desSign);
        if(!desSign.equals(sourceSign)){
            throw new BusinessException("签名不通过！");
        }*/

        StringBuffer tempStr = new StringBuffer();
        tempStr.append(data);
        tempStr.append(enterpricceIdVo.getKey());
        log.info("签名源串,{}", sourceSign);
        String desSign = DigestUtil.md5Hex(tempStr.toString());
        log.info("签名目的串,{}", desSign);
        if(!desSign.equals(sourceSign)){
            throw new BusinessException("签名不通过！");
        }
        EnterpriseClient enterpriseClient = (EnterpriseClient) ApplicationContextUtil.getBean("enterpriseClientFallback");
        //业务逻辑
        for (int i = 0; i < data.size(); i++) {
            JSONObject jsonObj = data.getJSONObject(i);
            String specCode = jsonObj.getString("specCode");
            if(StringUtils.isEmpty("specCode")){
                throw new BusinessException("第" + (i+1) +  "行规格码不能为空！");
            }

            String name = jsonObj.getString("name");
            if(StringUtils.isEmpty(name)){
                throw new BusinessException("第" + (i+1) +  "行规格系列名称不能为空！");
            }
            JsonResult onlyProductSeriesName = enterpriseClient.isOnlyProductSeriesName(name, null);
            if("false".equals(onlyProductSeriesName.getData().toString())){
                throw new BusinessException("第" + (i+1) +"行规格系列名称必须唯一，该名称：" +name+ "已存在！");
            }
            ProductForm productForm = new ProductForm();
            productForm.setName(name);
            productForm.setSpecCode(specCode);
            productForm.setPricingMethod(Product.PricingMethod.piece);
            productForm.setProductTypeId(0l);
            productForm.setProductCategoryId(0l);
            JsonResult jsonResult = enterpriseClient.addProductSeries(productForm);
            if (jsonResult.getCode() != Result.Code.SUCCESS.getCode()) {
                throw new BusinessException(jsonResult.getMsg());
            }

        }
    }
    public static void main(String[] args) {
        String desSign = DigestUtil.md5Hex("123456");
        String desSign2= DigestUtil.md5Hex("specCode" + "name"+ desSign);
        System.out.println(desSign);
        System.out.println(desSign2);
    }
}
